<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title></title>
    <style>
      /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript&plugins=line-highlight+line-numbers+toolbar+show-language */
      /**
     * prism.js default theme for JavaScript, CSS and HTML
     * Based on dabblet (http://dabblet.com)
     * @author Lea Verou
     */
      code[class*='language-'],
      pre[class*='language-'] {
        color: black;
        background: none;
        text-shadow: 0 1px white;
        font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
        text-align: left;
        white-space: pre;
        word-spacing: normal;
        word-break: normal;
        word-wrap: normal;
        line-height: 1.5;
        -moz-tab-size: 4;
        -o-tab-size: 4;
        tab-size: 4;
        -webkit-hyphens: none;
        -moz-hyphens: none;
        -ms-hyphens: none;
        hyphens: none;
      }
      pre[class*='language-']::-moz-selection,
      pre[class*='language-'] ::-moz-selection,
      code[class*='language-']::-moz-selection,
      code[class*='language-'] ::-moz-selection {
        text-shadow: none;
        background: #98d8b7;
      }
      pre[class*='language-']::selection,
      pre[class*='language-'] ::selection,
      code[class*='language-']::selection,
      code[class*='language-'] ::selection {
        text-shadow: none;
        background: #98d8b7;
      }
      @media print {
        code[class*='language-'],
        pre[class*='language-'] {
          text-shadow: none;
        }
      }
      /* Code blocks */
      pre[class*='language-'] {
        padding: 1em;
        margin: 0.5em 0;
        overflow: auto;
      }
      :not(pre) > code[class*='language-'],
      pre[class*='language-'] {
        background: #f5f2f0;
      }
      /* Inline code */
      :not(pre) > code[class*='language-'] {
        padding: 0.1em;
        border-radius: 0.3em;
        white-space: normal;
      }
      .token.comment,
      .token.prolog,
      .token.doctype,
      .token.cdata {
        color: slategray;
      }
      .token.punctuation {
        color: #999;
      }
      .namespace {
        opacity: 0.7;
      }
      .token.property,
      .token.tag,
      .token.boolean,
      .token.number,
      .token.constant,
      .token.symbol,
      .token.deleted {
        color: #905;
      }
      .token.selector,
      .token.attr-name,
      .token.string,
      .token.char,
      .token.builtin,
      .token.inserted {
        color: #690;
      }
      .token.operator,
      .token.entity,
      .token.url,
      .language-css .token.string,
      .style .token.string {
        color: #a67f59;
        background: hsla(0, 0%, 100%, 0.5);
      }
      .token.atrule,
      .token.attr-value,
      .token.keyword {
        color: #07a;
      }
      .token.function {
        color: #dd4a68;
      }
      .token.regex,
      .token.important,
      .token.variable {
        color: #e90;
      }
      .token.important,
      .token.bold {
        font-weight: bold;
      }
      .token.italic {
        font-style: italic;
      }
      .token.entity {
        cursor: help;
      }
      pre[data-line] {
        position: relative;
        padding: 1em 0 1em 3em;
      }
      .line-highlight {
        position: absolute;
        left: 0;
        right: 0;
        padding: inherit 0;
        margin-top: 1em; /* Same as .prism’s padding-top */
        background: hsla(24, 20%, 50%, 0.08);
        background: linear-gradient(to right, hsla(24, 20%, 50%, 0.1) 70%, hsla(24, 20%, 50%, 0));
        pointer-events: none;
        line-height: inherit;
        white-space: pre;
      }
      .line-highlight:before,
      .line-highlight[data-end]:after {
        content: attr(data-start);
        position: absolute;
        top: 0.4em;
        left: 0.6em;
        min-width: 1em;
        padding: 0 0.5em;
        background-color: hsla(24, 20%, 50%, 0.4);
        color: hsl(24, 20%, 95%);
        font: bold 65%/1.5 sans-serif;
        text-align: center;
        vertical-align: 0.3em;
        border-radius: 999px;
        text-shadow: none;
        box-shadow: 0 1px white;
      }
      .line-highlight[data-end]:after {
        content: attr(data-end);
        top: auto;
        bottom: 0.4em;
      }
      pre.line-numbers {
        position: relative;
        padding-left: 3.8em;
        counter-reset: linenumber;
      }
      pre.line-numbers > code {
        position: relative;
      }
      .line-numbers .line-numbers-rows {
        position: absolute;
        pointer-events: none;
        top: 0;
        font-size: 100%;
        left: -3.8em;
        width: 3em; /* works for line-numbers below 1000 lines */
        letter-spacing: -1px;
        border-right: 1px solid #999;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }
      .line-numbers-rows > span {
        pointer-events: none;
        display: block;
        counter-increment: linenumber;
      }
      .line-numbers-rows > span:before {
        content: counter(linenumber);
        color: #999;
        display: block;
        padding-right: 0.8em;
        text-align: right;
      }
      pre.code-toolbar {
        position: relative;
      }
      pre.code-toolbar > .toolbar {
        position: absolute;
        top: 0.3em;
        right: 0.2em;
        transition: opacity 0.3s ease-in-out;
        opacity: 0;
      }
      pre.code-toolbar:hover > .toolbar {
        opacity: 1;
      }
      pre.code-toolbar > .toolbar .toolbar-item {
        display: inline-block;
      }
      pre.code-toolbar > .toolbar a {
        cursor: pointer;
      }
      pre.code-toolbar > .toolbar button {
        background: none;
        border: 0;
        color: inherit;
        font: inherit;
        line-height: normal;
        overflow: visible;
        padding: 0;
        -webkit-user-select: none; /* for button */
        -moz-user-select: none;
        -ms-user-select: none;
      }
      pre.code-toolbar > .toolbar a,
      pre.code-toolbar > .toolbar button,
      pre.code-toolbar > .toolbar span {
        color: #bbb;
        font-size: 0.8em;
        padding: 0 0.5em;
        background: #f5f2f0;
        background: rgba(224, 224, 224, 0.2);
        box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2);
        border-radius: 0.5em;
      }
      pre.code-toolbar > .toolbar a:hover,
      pre.code-toolbar > .toolbar a:focus,
      pre.code-toolbar > .toolbar button:hover,
      pre.code-toolbar > .toolbar button:focus,
      pre.code-toolbar > .toolbar span:hover,
      pre.code-toolbar > .toolbar span:focus {
        color: inherit;
        text-decoration: none;
      }
    </style>

    <style>
      @keyframes hover-color {
        from {
          border-color: #c0c0c0;
        }
        to {
          border-color: #53b783;
        }
      }
      .magic-radio,
      .magic-checkbox {
        position: absolute;
        display: none;
      }
      .magic-radio[disabled],
      .magic-checkbox[disabled] {
        cursor: not-allowed;
      }
      .magic-radio + label,
      .magic-checkbox + label {
        position: relative;
        display: block;
        padding-left: 30px;
        cursor: pointer;
        vertical-align: middle;
      }
      .magic-radio + label:hover:before,
      .magic-checkbox + label:hover:before {
        animation-duration: 0.4s;
        animation-fill-mode: both;
        animation-name: hover-color;
      }
      .magic-radio + label:before,
      .magic-checkbox + label:before {
        position: absolute;
        top: 0;
        left: 0;
        display: inline-block;
        width: 20px;
        height: 20px;
        content: '';
        border: 1px solid #c0c0c0;
      }
      .magic-radio + label:after,
      .magic-checkbox + label:after {
        position: absolute;
        display: none;
        content: '';
      }
      .magic-radio[disabled] + label,
      .magic-checkbox[disabled] + label {
        cursor: not-allowed;
        color: #e4e4e4;
      }
      .magic-radio[disabled] + label:hover,
      .magic-radio[disabled] + label:before,
      .magic-radio[disabled] + label:after,
      .magic-checkbox[disabled] + label:hover,
      .magic-checkbox[disabled] + label:before,
      .magic-checkbox[disabled] + label:after {
        cursor: not-allowed;
      }
      .magic-radio[disabled] + label:hover:before,
      .magic-checkbox[disabled] + label:hover:before {
        border: 1px solid #e4e4e4;
        animation-name: none;
      }
      .magic-radio[disabled] + label:before,
      .magic-checkbox[disabled] + label:before {
        border-color: #e4e4e4;
      }
      .magic-radio:checked + label:before,
      .magic-checkbox:checked + label:before {
        animation-name: none;
      }
      .magic-radio:checked + label:after,
      .magic-checkbox:checked + label:after {
        display: block;
      }
      .magic-radio + label:before {
        border-radius: 50%;
      }
      .magic-radio + label:after {
        top: 6px;
        left: 6px;
        width: 8px;
        height: 8px;
        border-radius: 50%;
        background: #53b783;
      }
      .magic-radio:checked + label:before {
        border: 1px solid #53b783;
      }
      .magic-radio:checked[disabled] + label:before {
        border: 1px solid #c9e2f9;
      }
      .magic-radio:checked[disabled] + label:after {
        background: #c9e2f9;
      }
      .magic-checkbox + label:before {
        border-radius: 3px;
      }
      .magic-checkbox + label:after {
        top: 2px;
        left: 7px;
        box-sizing: border-box;
        width: 6px;
        height: 12px;
        transform: rotate(45deg);
        border-width: 2px;
        border-style: solid;
        border-color: #fff;
        border-top: 0;
        border-left: 0;
      }
      .magic-checkbox:checked + label:before {
        border: #53b783;
        background: #53b783;
      }
      .magic-checkbox:checked[disabled] + label:before {
        border: #c9e2f9;
        background: #c9e2f9;
      }
    </style>

    <style>
      html,
      body {
        height: 100%;
        width: 100%;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
      }
      body {
        font-family:
          Helvetica Neue For Number,
          -apple-system,
          BlinkMacSystemFont,
          Segoe UI,
          Roboto,
          PingFang SC,
          Hiragino Sans GB,
          Microsoft YaHei,
          Helvetica Neue,
          Helvetica,
          Arial,
          sans-serif;
        font-size: 14px;
        line-height: 24px;
        color: #444;
      }
      * {
        padding: 0;
        margin: 0;
      }
      ::selection {
        text-shadow: none;
        color: #fff;
        background: #98d8b7;
      }
      ::-moz-selection {
        text-shadow: none;
        color: #fff;
        background: #98d8b7;
      }
      .error-page {
        display: flex;
        flex-direction: column;
        width: 100%;
        height: 100%;
      }
      .error-logo {
        position: absolute;
        top: -15px;
        right: 0px;
      }
      .error-stack {
        background: #f1f1f1;
        padding: 140px 80px 40px;
        box-sizing: border-box;
        border-bottom: 1px solid #e2e2e2;
      }
      .error-status {
        color: #afafaf;
        font-size: 150px;
        position: absolute;
        opacity: 0.2;
        left: 76px;
        top: 80px;
        font-weight: 600;
        margin-bottom: 10px;
      }
      .error-name {
        color: #db5461;
        font-size: 18px;
        font-family: menlo, 'sans-serif';
        font-weight: 300;
        margin-bottom: 15px;
      }
      .error-title {
        border-bottom: 1px solid #e0e0e0;
        padding-bottom: 26px;
        margin-bottom: 20px;
        margin-top: 48px;
      }
      .error-title .box {
        color: #db5461;
        font-weight: 700;
        font-size: 20px;
        margin-left: 5px;
      }
      .error-title .context {
        color: #db5461;
        font-weight: 400;
        margin-left: 5px;
        margin-top: 48px;
        line-height: 1.5;
      }
      .error-frames {
        display: flex;
        flex-direction: row-reverse;
        margin-top: 40px;
      }
      .frame-preview {
        background: #fff;
        width: 50%;
        box-shadow: 0px 0px 9px #d3d3d3;
        height: 100%;
        box-sizing: border-box;
        overflow: auto;
      }
      .frame-stack {
        margin-right: 40px;
        flex: 1;
        padding: 10px 0;
        box-sizing: border-box;
      }
      .frames-list {
        overflow: auto;
        max-height: 334px;
      }
      .frames-filter-selector {
        margin-bottom: 30px;
        margin-left: 8px;
      }
      .request-details {
        padding: 50px 80px;
      }
      .request-title {
        text-transform: uppercase;
        font-size: 18px;
        letter-spacing: 1px;
        padding: 0 5px 5px 5px;
        margin-bottom: 15px;
        color: #53b783;
      }
      .request-details .table {
        width: 100%;
        border-collapse: collapse;
        margin-bottom: 80px;
      }
      .request-details .tr {
        display: flex;
        flex-direction: row;
      }
      .request-details .tr:nth-of-type(even) {
        background: #fbfbfb;
      }
      .request-details .table .td {
        padding: 6px 5px;
        font-size: 14px;
        letter-spacing: 0.4px;
        color: #455275;
        border-bottom: 1px solid #e8e8e8;
        word-break: break-word;
      }
      .request-details .table .td.title {
        flex: 1;
        color: #565655;
        font-size: 14px;
        font-weight: 600;
      }
      .request-details .table .td.content {
        width: 70%;
      }
      .request-details .table .td.content.code {
        background: #fff;
        width: 70%;
        box-shadow: 0px 0px 9px #d3d3d3;
        height: 100%;
        box-sizing: border-box;
        overflow: auto;
      }
      code[class*='language-'],
      pre[class*='language-'] {
        background: transparent;
        font-size: 13px;
        line-height: 1.8;
      }
      .line-numbers .line-numbers-rows {
        border: none;
      }
      .frame-row {
        display: flex;
        justify-content: space-between;
        padding: 6px 10px 6px 34px;
        position: relative;
        cursor: pointer;
        transition: background 300ms ease;
      }
      .frame-row.native-frame {
        display: none;
        opacity: 0.4;
      }
      .frame-row.native-frame.force-show {
        display: flex;
      }
      .frame-row:after {
        content: '';
        background: #db5461;
        position: absolute;
        top: 50%;
        left: 10px;
        transform: translateY(-50%);
        height: 10px;
        width: 10px;
        border-radius: 24px;
      }
      .frame-row:hover,
      .frame-row.active {
        background: #fff;
      }
      .frame-row.active {
        opacity: 1;
      }
      .frame-row-filepath {
        color: #455275;
        font-weight: 600;
        margin-right: 15px;
      }
      .frame-context {
        display: none;
      }
      .frame-row-code {
        color: #999;
      }
      #frame-file {
        color: #455275;
        font-weight: 600;
        border-bottom: 1px solid #e8e8e8;
        padding: 10px 22px;
      }
      #frame-method {
        color: #999;
        font-weight: 400;
        border-top: 1px solid #e8e8e8;
        padding: 10px 22px;
      }
      .is-hidden {
        display: none;
      }
    </style>
  </head>
  <body>
    <section class="error-page">
      <section class="error-stack">
        <h3 class="error-status">{{ status }}</h3>
        <div class="error-title">
          <h1 class="box">{{ name }} in {{ request.url }}</h1>
          <div class="context">{{ message }}</div>
        </div>

        <img class="error-logo" src="https://zos.alipayobjects.com/rmsportal/JFKAMfmPehWfhBPdCjrw.svg" />

        <div class="error-frames">
          <div class="frame-preview is-hidden">
            <div id="frame-file"></div>
            <div id="frame-code">
              <pre class="line-numbers"><code id="code-drop"></code></pre>
            </div>
            <div id="frame-method"></div>
          </div>

          <div class="frame-stack">
            <div class="frames-filter-selector">
              <input type="checkbox" class="magic-checkbox" name="frames-filter" id="frames-filter" />
              <label for="frames-filter">Show all frames</label>
            </div>

            <div class="frames-list">
              {{#frames}} {{index}}
              <div class="frame-row {{classes}}">
                <div class="frame-row-filepath">{{ file }}:{{ line }}:{{ column }}</div>
                <div class="frame-row-code">{{ method }}</div>
                <div
                  class="frame-context"
                  data-start="{{context.start}}"
                  data-line="{{line}}"
                  data-file="{{file}}"
                  data-method="{{method}}"
                  data-extname="{{extname}}"
                  data-line-column="{{line}}:{{column}}"
                >
                  {{ context.pre }} {{ context.line }} {{ context.post }}
                </div>
              </div>
              {{/frames}}
            </div>
          </div>
        </div>
      </section>

      <section class="request-details">
        <h2 class="request-title">Request Details</h2>
        <div class="table">
          <div class="tr">
            <div class="td title">URI</div>
            <div class="td content">{{ request.url }}</div>
          </div>

          <div class="tr">
            <div class="td title">Request Method</div>
            <div class="td content">{{ request.method }}</div>
          </div>

          <div class="tr">
            <div class="td title">HTTP Version</div>
            <div class="td content">{{ request.httpVersion }}</div>
          </div>

          <div class="tr">
            <div class="td title">Connection</div>
            <div class="td content">{{ request.connection }}</div>
          </div>
        </div>

        <h2 class="request-title">Headers</h2>
        <div class="table">
          {{#request.headers}}
          <div class="tr">
            <div class="td title">{{ key }}</div>
            <div class="td content">{{ value }}</div>
          </div>
          {{/request.headers}}
        </div>

        <h2 class="request-title">Cookies</h2>
        <div class="table">
          {{#request.cookies}}
          <div class="tr">
            <div class="td title">{{ key }}</div>
            <div class="td content">{{ value }}</div>
          </div>
          {{/request.cookies}}
        </div>
        <h2 class="request-title">AppInfo</h2>
        <div class="table">
          <div class="tr">
            <div class="td title">baseDir</div>
            <div class="td content">{{ appInfo.baseDir }}</div>
          </div>
          <div class="tr">
            <div class="td title">config</div>
            <div class="td content code">
              <pre class="line-numbers"><code class="language-json">{{ appInfo.config }}</code></pre>
            </div>
          </div>
        </div>
      </section>

      <script type="text/javascript">
        var _self =
            'undefined' != typeof window
              ? window
              : 'undefined' != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope
                ? self
                : {},
          Prism = (function () {
            var e = /\blang(?:uage)?-(\w+)\b/i,
              t = 0,
              n = (_self.Prism = {
                util: {
                  encode: function (e) {
                    return e instanceof a
                      ? new a(e.type, n.util.encode(e.content), e.alias)
                      : 'Array' === n.util.type(e)
                        ? e.map(n.util.encode)
                        : e
                            .replace(/&/g, '&amp;')
                            .replace(/</g, '&lt;')
                            .replace(/\u00a0/g, ' ');
                  },
                  type: function (e) {
                    return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1];
                  },
                  objId: function (e) {
                    return (e.__id || Object.defineProperty(e, '__id', { value: ++t }), e.__id);
                  },
                  clone: function (e) {
                    var t = n.util.type(e);
                    switch (t) {
                      case 'Object':
                        var a = {};
                        for (var r in e) e.hasOwnProperty(r) && (a[r] = n.util.clone(e[r]));
                        return a;
                      case 'Array':
                        return (
                          e.map &&
                          e.map(function (e) {
                            return n.util.clone(e);
                          })
                        );
                    }
                    return e;
                  },
                },
                languages: {
                  extend: function (e, t) {
                    var a = n.util.clone(n.languages[e]);
                    for (var r in t) a[r] = t[r];
                    return a;
                  },
                  insertBefore: function (e, t, a, r) {
                    r = r || n.languages;
                    var i = r[e];
                    if (2 == arguments.length) {
                      a = arguments[1];
                      for (var l in a) a.hasOwnProperty(l) && (i[l] = a[l]);
                      return i;
                    }
                    var o = {};
                    for (var s in i)
                      if (i.hasOwnProperty(s)) {
                        if (s == t) for (var l in a) a.hasOwnProperty(l) && (o[l] = a[l]);
                        o[s] = i[s];
                      }
                    return (
                      n.languages.DFS(n.languages, function (t, n) {
                        n === r[e] && t != e && (this[t] = o);
                      }),
                      (r[e] = o)
                    );
                  },
                  DFS: function (e, t, a, r) {
                    r = r || {};
                    for (var i in e)
                      e.hasOwnProperty(i) &&
                        (t.call(e, i, e[i], a || i),
                        'Object' !== n.util.type(e[i]) || r[n.util.objId(e[i])]
                          ? 'Array' !== n.util.type(e[i]) ||
                            r[n.util.objId(e[i])] ||
                            ((r[n.util.objId(e[i])] = !0), n.languages.DFS(e[i], t, i, r))
                          : ((r[n.util.objId(e[i])] = !0), n.languages.DFS(e[i], t, null, r)));
                  },
                },
                plugins: {},
                highlightAll: function (e, t) {
                  var a = {
                    callback: t,
                    selector:
                      'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code',
                  };
                  n.hooks.run('before-highlightall', a);
                  for (var r, i = a.elements || document.querySelectorAll(a.selector), l = 0; (r = i[l++]); )
                    n.highlightElement(r, e === !0, a.callback);
                },
                highlightElement: function (t, a, r) {
                  for (var i, l, o = t; o && !e.test(o.className); ) o = o.parentNode;
                  (o && ((i = (o.className.match(e) || [, ''])[1].toLowerCase()), (l = n.languages[i])),
                    (t.className = t.className.replace(e, '').replace(/\s+/g, ' ') + ' language-' + i),
                    (o = t.parentNode),
                    /pre/i.test(o.nodeName) &&
                      (o.className = o.className.replace(e, '').replace(/\s+/g, ' ') + ' language-' + i));
                  var s = t.textContent,
                    u = { element: t, language: i, grammar: l, code: s };
                  if ((n.hooks.run('before-sanity-check', u), !u.code || !u.grammar))
                    return (u.code && (u.element.textContent = u.code), n.hooks.run('complete', u), void 0);
                  if ((n.hooks.run('before-highlight', u), a && _self.Worker)) {
                    var g = new Worker(n.filename);
                    ((g.onmessage = function (e) {
                      ((u.highlightedCode = e.data),
                        n.hooks.run('before-insert', u),
                        (u.element.innerHTML = u.highlightedCode),
                        r && r.call(u.element),
                        n.hooks.run('after-highlight', u),
                        n.hooks.run('complete', u));
                    }),
                      g.postMessage(JSON.stringify({ language: u.language, code: u.code, immediateClose: !0 })));
                  } else
                    ((u.highlightedCode = n.highlight(u.code, u.grammar, u.language)),
                      n.hooks.run('before-insert', u),
                      (u.element.innerHTML = u.highlightedCode),
                      r && r.call(t),
                      n.hooks.run('after-highlight', u),
                      n.hooks.run('complete', u));
                },
                highlight: function (e, t, r) {
                  var i = n.tokenize(e, t);
                  return a.stringify(n.util.encode(i), r);
                },
                tokenize: function (e, t) {
                  var a = n.Token,
                    r = [e],
                    i = t.rest;
                  if (i) {
                    for (var l in i) t[l] = i[l];
                    delete t.rest;
                  }
                  e: for (var l in t)
                    if (t.hasOwnProperty(l) && t[l]) {
                      var o = t[l];
                      o = 'Array' === n.util.type(o) ? o : [o];
                      for (var s = 0; s < o.length; ++s) {
                        var u = o[s],
                          g = u.inside,
                          c = !!u.lookbehind,
                          h = !!u.greedy,
                          f = 0,
                          d = u.alias;
                        if (h && !u.pattern.global) {
                          var p = u.pattern.toString().match(/[imuy]*$/)[0];
                          u.pattern = RegExp(u.pattern.source, p + 'g');
                        }
                        u = u.pattern || u;
                        for (var m = 0, y = 0; m < r.length; y += r[m].length, ++m) {
                          var v = r[m];
                          if (r.length > e.length) break e;
                          if (!(v instanceof a)) {
                            u.lastIndex = 0;
                            var b = u.exec(v),
                              k = 1;
                            if (!b && h && m != r.length - 1) {
                              if (((u.lastIndex = y), (b = u.exec(e)), !b)) break;
                              for (
                                var w = b.index + (c ? b[1].length : 0),
                                  _ = b.index + b[0].length,
                                  A = m,
                                  P = y,
                                  j = r.length;
                                j > A && _ > P;
                                ++A
                              )
                                ((P += r[A].length), w >= P && (++m, (y = P)));
                              if (r[m] instanceof a || r[A - 1].greedy) continue;
                              ((k = A - m), (v = e.slice(y, P)), (b.index -= y));
                            }
                            if (b) {
                              c && (f = b[1].length);
                              var w = b.index + f,
                                b = b[0].slice(f),
                                _ = w + b.length,
                                x = v.slice(0, w),
                                O = v.slice(_),
                                S = [m, k];
                              x && S.push(x);
                              var N = new a(l, g ? n.tokenize(b, g) : b, d, b, h);
                              (S.push(N), O && S.push(O), Array.prototype.splice.apply(r, S));
                            }
                          }
                        }
                      }
                    }
                  return r;
                },
                hooks: {
                  all: {},
                  add: function (e, t) {
                    var a = n.hooks.all;
                    ((a[e] = a[e] || []), a[e].push(t));
                  },
                  run: function (e, t) {
                    var a = n.hooks.all[e];
                    if (a && a.length) for (var r, i = 0; (r = a[i++]); ) r(t);
                  },
                },
              }),
              a = (n.Token = function (e, t, n, a, r) {
                ((this.type = e),
                  (this.content = t),
                  (this.alias = n),
                  (this.length = 0 | (a || '').length),
                  (this.greedy = !!r));
              });
            if (
              ((a.stringify = function (e, t, r) {
                if ('string' == typeof e) return e;
                if ('Array' === n.util.type(e))
                  return e
                    .map(function (n) {
                      return a.stringify(n, t, e);
                    })
                    .join('');
                var i = {
                  type: e.type,
                  content: a.stringify(e.content, t, r),
                  tag: 'span',
                  classes: ['token', e.type],
                  attributes: {},
                  language: t,
                  parent: r,
                };
                if (('comment' == i.type && (i.attributes.spellcheck = 'true'), e.alias)) {
                  var l = 'Array' === n.util.type(e.alias) ? e.alias : [e.alias];
                  Array.prototype.push.apply(i.classes, l);
                }
                n.hooks.run('wrap', i);
                var o = Object.keys(i.attributes)
                  .map(function (e) {
                    return e + '="' + (i.attributes[e] || '').replace(/"/g, '&quot;') + '"';
                  })
                  .join(' ');
                return (
                  '<' +
                  i.tag +
                  ' class="' +
                  i.classes.join(' ') +
                  '"' +
                  (o ? ' ' + o : '') +
                  '>' +
                  i.content +
                  '</' +
                  i.tag +
                  '>'
                );
              }),
              !_self.document)
            )
              return _self.addEventListener
                ? (_self.addEventListener(
                    'message',
                    function (e) {
                      var t = JSON.parse(e.data),
                        a = t.language,
                        r = t.code,
                        i = t.immediateClose;
                      (_self.postMessage(n.highlight(r, n.languages[a], a)), i && _self.close());
                    },
                    !1
                  ),
                  _self.Prism)
                : _self.Prism;
            var r = document.currentScript || [].slice.call(document.getElementsByTagName('script')).pop();
            return (
              r &&
                ((n.filename = r.src),
                document.addEventListener &&
                  !r.hasAttribute('data-manual') &&
                  ('loading' !== document.readyState
                    ? window.requestAnimationFrame
                      ? window.requestAnimationFrame(n.highlightAll)
                      : window.setTimeout(n.highlightAll, 16)
                    : document.addEventListener('DOMContentLoaded', n.highlightAll))),
              _self.Prism
            );
          })();
        ('undefined' != typeof module && module.exports && (module.exports = Prism),
          'undefined' != typeof global && (global.Prism = Prism));
        ((Prism.languages.markup = {
          comment: /<!--[\w\W]*?-->/,
          prolog: /<\?[\w\W]+?\?>/,
          doctype: /<!DOCTYPE[\w\W]+?>/i,
          cdata: /<!\[CDATA\[[\w\W]*?]]>/i,
          tag: {
            pattern:
              /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,
            inside: {
              tag: { pattern: /^<\/?[^\s>\/]+/i, inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ } },
              'attr-value': { pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i, inside: { punctuation: /[=>"']/ } },
              punctuation: /\/?>/,
              'attr-name': { pattern: /[^\s>\/]+/, inside: { namespace: /^[^\s>\/:]+:/ } },
            },
          },
          entity: /&#?[\da-z]{1,8};/i,
        }),
          Prism.hooks.add('wrap', function (a) {
            'entity' === a.type && (a.attributes.title = a.content.replace(/&amp;/, '&'));
          }),
          (Prism.languages.xml = Prism.languages.markup),
          (Prism.languages.html = Prism.languages.markup),
          (Prism.languages.mathml = Prism.languages.markup),
          (Prism.languages.svg = Prism.languages.markup));
        ((Prism.languages.css = {
          comment: /\/\*[\w\W]*?\*\//,
          atrule: { pattern: /@[\w-]+?.*?(;|(?=\s*\{))/i, inside: { rule: /@[\w-]+/ } },
          url: /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,
          selector: /[^\{\}\s][^\{\};]*?(?=\s*\{)/,
          string: { pattern: /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, greedy: !0 },
          property: /(\b|\B)[\w-]+(?=\s*:)/i,
          important: /\B!important\b/i,
          function: /[-a-z0-9]+(?=\()/i,
          punctuation: /[(){};:]/,
        }),
          (Prism.languages.css.atrule.inside.rest = Prism.util.clone(Prism.languages.css)),
          Prism.languages.markup &&
            (Prism.languages.insertBefore('markup', 'tag', {
              style: {
                pattern: /(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i,
                lookbehind: !0,
                inside: Prism.languages.css,
                alias: 'language-css',
              },
            }),
            Prism.languages.insertBefore(
              'inside',
              'attr-value',
              {
                'style-attr': {
                  pattern: /\s*style=("|').*?\1/i,
                  inside: {
                    'attr-name': { pattern: /^\s*style/i, inside: Prism.languages.markup.tag.inside },
                    punctuation: /^\s*=\s*['"]|['"]\s*$/,
                    'attr-value': { pattern: /.+/i, inside: Prism.languages.css },
                  },
                  alias: 'language-css',
                },
              },
              Prism.languages.markup.tag
            )));
        Prism.languages.clike = {
          comment: [
            { pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, lookbehind: !0 },
            { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0 },
          ],
          string: { pattern: /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: !0 },
          'class-name': {
            pattern:
              /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,
            lookbehind: !0,
            inside: { punctuation: /(\.|\\)/ },
          },
          keyword:
            /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
          boolean: /\b(true|false)\b/,
          function: /[a-z0-9_]+(?=\()/i,
          number: /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,
          operator: /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
          punctuation: /[{}[\];(),.:]/,
        };
        ((Prism.languages.javascript = Prism.languages.extend('clike', {
          keyword:
            /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,
          number: /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,
          function: /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,
          operator: /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/,
        })),
          Prism.languages.insertBefore('javascript', 'keyword', {
            regex: {
              pattern: /(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,
              lookbehind: !0,
              greedy: !0,
            },
          }),
          Prism.languages.insertBefore('javascript', 'string', {
            'template-string': {
              pattern: /`(?:\\\\|\\?[^\\])*?`/,
              greedy: !0,
              inside: {
                interpolation: {
                  pattern: /\$\{[^}]+\}/,
                  inside: {
                    'interpolation-punctuation': { pattern: /^\$\{|\}$/, alias: 'punctuation' },
                    rest: Prism.languages.javascript,
                  },
                },
                string: /[\s\S]+/,
              },
            },
          }),
          Prism.languages.markup &&
            Prism.languages.insertBefore('markup', 'tag', {
              script: {
                pattern: /(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,
                lookbehind: !0,
                inside: Prism.languages.javascript,
                alias: 'language-javascript',
              },
            }),
          (Prism.languages.js = Prism.languages.javascript));
        ((Prism.languages.json = {
          property: /"(?:\\.|[^\\"])*"(?=\s*:)/gi,
          string: /"(?!:)(?:\\.|[^\\"])*"(?!:)/g,
          number: /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?)\b/g,
          punctuation: /[{}[\]);,]/g,
          operator: /:/g,
          boolean: /\b(true|false)\b/gi,
          null: /\bnull\b/gi,
        }),
          (Prism.languages.jsonp = Prism.languages.json));
        ((Prism.languages.typescript = Prism.languages.extend('javascript', {
          keyword:
            /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|false|true|module|declare|constructor|string|Function|any|number|boolean|Array|enum|symbol|namespace|abstract|require|type)\b/,
        })),
          (Prism.languages.ts = Prism.languages.typescript));
        !(function () {
          function e(e, t) {
            return Array.prototype.slice.call((t || document).querySelectorAll(e));
          }
          function t(e, t) {
            return ((t = ' ' + t + ' '), (' ' + e.className + ' ').replace(/[\n\t]/g, ' ').indexOf(t) > -1);
          }
          function n(e, n, i) {
            for (
              var o,
                a = n.replace(/\s+/g, '').split(','),
                l = +e.getAttribute('data-line-offset') || 0,
                d = r() ? parseInt : parseFloat,
                c = d(getComputedStyle(e).lineHeight),
                s = 0;
              (o = a[s++]);

            ) {
              o = o.split('-');
              var u = +o[0],
                m = +o[1] || u,
                h = document.createElement('div');
              ((h.textContent = Array(m - u + 2).join(' \n')),
                h.setAttribute('aria-hidden', 'true'),
                (h.className = (i || '') + ' line-highlight'),
                t(e, 'line-numbers') || (h.setAttribute('data-start', u), m > u && h.setAttribute('data-end', m)),
                (h.style.top = (u - l - 1) * c + 'px'),
                t(e, 'line-numbers') ? e.appendChild(h) : (e.querySelector('code') || e).appendChild(h));
            }
          }
          function i() {
            var t = location.hash.slice(1);
            e('.temporary.line-highlight').forEach(function (e) {
              e.parentNode.removeChild(e);
            });
            var i = (t.match(/\.([\d,-]+)$/) || [, ''])[1];
            if (i && !document.getElementById(t)) {
              var r = t.slice(0, t.lastIndexOf('.')),
                o = document.getElementById(r);
              o &&
                (o.hasAttribute('data-line') || o.setAttribute('data-line', ''),
                n(o, i, 'temporary '),
                document.querySelector('.temporary.line-highlight').scrollIntoView());
            }
          }
          if ('undefined' != typeof self && self.Prism && self.document && document.querySelector) {
            var r = (function () {
                var e;
                return function () {
                  if ('undefined' == typeof e) {
                    var t = document.createElement('div');
                    ((t.style.fontSize = '13px'),
                      (t.style.lineHeight = '1.5'),
                      (t.style.padding = 0),
                      (t.style.border = 0),
                      (t.innerHTML = '&nbsp;<br />&nbsp;'),
                      document.body.appendChild(t),
                      (e = 38 === t.offsetHeight),
                      document.body.removeChild(t));
                  }
                  return e;
                };
              })(),
              o = 0;
            (Prism.hooks.add('complete', function (t) {
              var r = t.element.parentNode,
                a = r && r.getAttribute('data-line');
              r &&
                a &&
                /pre/i.test(r.nodeName) &&
                (clearTimeout(o),
                e('.line-highlight', r).forEach(function (e) {
                  e.parentNode.removeChild(e);
                }),
                n(r, a),
                (o = setTimeout(i, 1)));
            }),
              window.addEventListener && window.addEventListener('hashchange', i));
          }
        })();
        !(function () {
          'undefined' != typeof self &&
            self.Prism &&
            self.document &&
            Prism.hooks.add('complete', function (e) {
              if (e.code) {
                var t = e.element.parentNode,
                  s = /\s*\bline-numbers\b\s*/;
                if (
                  t &&
                  /pre/i.test(t.nodeName) &&
                  (s.test(t.className) || s.test(e.element.className)) &&
                  !e.element.querySelector('.line-numbers-rows')
                ) {
                  (s.test(e.element.className) && (e.element.className = e.element.className.replace(s, '')),
                    s.test(t.className) || (t.className += ' line-numbers'));
                  var n,
                    a = e.code.match(/\n(?!$)/g),
                    l = a ? a.length + 1 : 1,
                    r = new Array(l + 1);
                  ((r = r.join('<span></span>')),
                    (n = document.createElement('span')),
                    n.setAttribute('aria-hidden', 'true'),
                    (n.className = 'line-numbers-rows'),
                    (n.innerHTML = r),
                    t.hasAttribute('data-start') &&
                      (t.style.counterReset = 'linenumber ' + (parseInt(t.getAttribute('data-start'), 10) - 1)),
                    e.element.appendChild(n));
                }
              }
            });
        })();
      </script>
      <script>
        (function () {
          const $ = function (value) {
            return document.querySelector(value);
          };
          const $$ = function (value) {
            return document.querySelectorAll(value);
          };
          var nativeFramesLength = $$('.frame-row.native-frame').length;
          var allFramesLength = $$('.frame-row').length;
          function filterFrames() {
            $('.frame-preview').classList.remove('is-hidden');
            var isSelected = $('#frames-filter').checked;
            if (isSelected) {
              $$('.frame-row.native-frame').forEach(function (node) {
                node.classList.add('force-show');
              });
            } else {
              $$('.frame-row.native-frame').forEach(function (node) {
                node.classList.remove('force-show');
              });
              var activeFrame = $('.frame-row.active');
              if (activeFrame.classList.contains('native-frame')) {
                activeFrame.classList.remove('active');
                var firstFrame = $$('.frame-row')[0];
                firstFrame.classList.add('active');
                showFrameContext(firstFrame);
              }
            }
          }
          function displayFirstView() {
            if (nativeFramesLength !== allFramesLength) {
              $('.frame-preview').classList.remove('is-hidden');
            }
          }
          function showFrameContext(frame) {
            $frameContext = frame.querySelector('.frame-context');
            var $context = $frameContext.innerHTML;
            $context = $context.trim().length === 0 ? 'Missing stack frames' : $context;
            var $line = $frameContext.getAttribute('data-line');
            var $start = $frameContext.getAttribute('data-start');
            var $file = $frameContext.getAttribute('data-file');
            var $method = $frameContext.getAttribute('data-method');
            var $lineColumn = $frameContext.getAttribute('data-line-column');
            var $language = $frameContext.getAttribute('data-extname') || 'js';
            $('#code-drop').parentNode.setAttribute('data-line', $line);
            $('#code-drop').parentNode.setAttribute('data-start', $start);
            $('#code-drop').parentNode.setAttribute('data-language', $language);
            $('#code-drop').parentNode.setAttribute('data-line-offset', Number($start) - 1);
            $('#code-drop').setAttribute('class', 'language-' + $language);
            $('#code-drop').innerHTML = $context;
            $('#frame-file').innerHTML = $file;
            $('#frame-method').innerHTML = $method + '' + $lineColumn;

            Prism.highlightAll();
          }
          $$('.frame-row').forEach(function (node) {
            node.onclick = function (e) {
              $$('.frame-row').forEach(function (_node) {
                _node.classList.remove('active');
              });
              e.currentTarget.classList.add('active');
              showFrameContext(e.currentTarget);
            };
          });
          $('#frames-filter').onclick = function () {
            filterFrames();
          };
          displayFirstView();
          showFrameContext($('.frame-row.active'));
        })();
      </script>
    </section>
  </body>
</html>
